import { createContext, MutableRefObject } from 'react';
import { inbiz } from '@inbiz/core';
import { SearchEngineProps } from '../preview/web/index';
export enum ActionType {
  UPDATE_KEYWORDS_SWITCH = 'UPDATE_KEYWORDS_SWITCH',
  UPDATE_KEYWORDS_POSITION = 'UPDATE_KEYWORDS_POSITION',
  UPDATE_KEYWORDS_NUMBER = 'UPDATE_KEYWORDS_NUMBER',
  UPDATE_TABS_CONFIG = 'UPDATE_TABS_CONFIG',
  UPDATE_REFRESH = 'UPDATE_REFRESH',
}
import { getMessage } from '@inbiz/react';

export interface ReducerAction {
  [ActionType.UPDATE_KEYWORDS_SWITCH]: {
    type: ActionType.UPDATE_KEYWORDS_SWITCH;
    payload: boolean;
  };
  [ActionType.UPDATE_KEYWORDS_POSITION]: {
    type: ActionType.UPDATE_KEYWORDS_POSITION;
    payload: 'top' | 'bottom' | 'inside';
  };
  [ActionType.UPDATE_KEYWORDS_NUMBER]: {
    type: ActionType.UPDATE_KEYWORDS_NUMBER;
    payload: number;
  };
  [ActionType.UPDATE_TABS_CONFIG]: {
    type: ActionType.UPDATE_TABS_CONFIG;
    payload: TabsConfigState[];
  };
  [ActionType.UPDATE_REFRESH]: {
    type: ActionType.UPDATE_REFRESH;
    payload: StateType;
  };
}

/** 标签配置 */
export interface TabsConfigState {
  /** 标签编号 */
  guid: string;
  /** 标签名称 */
  title: string;
  isFile?: boolean;
  isFolder?: boolean;
  /** 全部搜索 */
  isAll?: boolean;
  /** 是否显示该标签 */
  isShow?: boolean;
  /** 该标签是否可编辑 */
  isEdit?: boolean;
  /** 该标签是否可删除 */
  isDelete?: boolean;
  /** 索引库名称 */
  indexLibraryName?: string;
  /** 是否开启高级搜索 */
  advancedSearch?: boolean;
  /** 关键词图谱 */
  keywordAtlas?: boolean;
  /** 以图搜图 */
  imgSearchImg?: boolean;
  /** DMS搜索条件 */
  searchType?: {
    value: 1 /** 内容 */ | 2 /** 文件名 */ | 3 /** 文件夹 */ | 4 /** 标签 */;
    label: string;
  }[];
  customRange?: ('allFolder' /** 全库 */ | 'curfolder') /** 当前文件夹 */[];
  /** DMS搜索文件夹ID */
  selectFolderID?: [
    {
      folderid: number;
      parentfolderid: number;
    },
  ];
  /** DMS搜索文件夹名 */
  searchFolderName?: string;
  /** 高级搜索样式 */
  advancedSearchStyle?: 'style1' | 'style2';
  /** 关联高级搜索页面 */
  associateAdvancedSearchPage?: string;
  /** 索引库名 */
  indexLibraries?: any[];
  /** 打开搜索方式(模糊搜索和精确搜索) */
  searchMode?: boolean;
  filepath?: string,
}

export interface StateType extends Omit<SearchEngineProps, 'callBackEvents'> {
  // 入口文字
  title: {
    status: boolean;
    value: string;
  };
  // 搜索按钮图标
  icon: {
    type: string;
    size: string;
    color: string;
  };
  //组件id
  controlId: string;
  /** 面板类型 (内嵌面板、大面板) */
  viewType: 'inlineView' | 'largePanelView' | 'smallPanelView';
  /** 搜索图标 **/
  searchIcon: { type: string };
  buttonIcon: { type: string };
  /** 关键词开关 */
  hotKeywordsSwitch: boolean;
  quikSearch: boolean,
  quikSearchPanelHeight: number,
  historySearch: boolean,
  /** 关键词位置 */
  hotKeywordsPosition: 'inside' | 'top' | 'bottom';
  /** 关键词数量 */
  hotKeywordsNumber: number;
  /** 标签配置 */
  tabsConfig: TabsConfigState[];
  /** 索引范围 */
  indexRange: boolean;
  /** 检索条件 */
  detection: boolean;
  /** 显示联想词 */
  associativeWords: boolean;
  /** tab选择器面板宽度 */
  pullWidth: number;
  inbiz: inbiz;
  /**搜索结构显示类型 */
  searchResultType: 'page' | 'component';
  /** 指定搜索结果页 */
  searchResultPage: string;
  /** 指定搜索结果组件 */
  searchResultComponent: string;
  /** 打开方式 */
  searchResultPageType: '_blank' | '_self';
  /** 检索图标 **/
  endSearchIcon?: { type: string };
  /** 结果中检索 */
  resultSearch: {
    value: string;
    status: boolean;
  };
  // 同义词搜索
  synonymSearch: boolean,
  fixedWidth: string,
}

export interface ContextStateType {
  state: StateType;
}

export const initialState: ContextStateType = {
  state: {
    inbiz: {} as inbiz,
    title: {
      status: true,
      value: 'SearchEngine.search',
    },
    icon: {
      type: 'icon-inbiz_basic-search',
      size: '32px',
      color: 'rgb(102, 102, 102)',
    },
    controlId: '',
    viewType: 'inlineView',
    searchIcon: { type: '' },
    buttonIcon: { type: '' },
    searchResultType: 'page',
    searchResultPage: '',
    searchResultComponent: '',
    hotKeywordsSwitch: true,
    quikSearch: false,
    historySearch: false,
    hotKeywordsPosition: 'inside',
    hotKeywordsNumber: 8,
    indexRange: true,
    detection: false,
    associativeWords: true,
    pullWidth: 100,
    searchResultPageType: '_blank',
    endSearchIcon: { type: '' },
    resultSearch: {
      value: 'SearchEngine.resultSearch',
      status: true,
    },
    synonymSearch: false,
    tabsConfig: [
      {
        guid: '202101031218', // 编号
        title: getMessage('SearchEngine.whole'), // 标签名称
        isAll: false, // 全部搜索
        isShow: true, // 是否显示
        isEdit: false, // 是否可以编辑
        isDelete: false, // 是否可以删除
        searchMode: true, // 打开搜索方式(模糊搜索和精确搜索)
        indexLibraryName: '202101031218',
      },
      {
        guid: '202101031117', // 编号
        title: getMessage('SearchEngine.document'),
        isDMS: true,
        isShow: true, // 是否显示
        isEdit: true, // 是否可以编辑
        isDelete: false, // 是否可以删除
        indexLibraryName: 'DMS', // 索引库名
        advancedSearch: false, // 开启高级搜索
        customRange: ['allFolder', 'curfolder'], // 可选全库或者当前文件夹
        searchType: [
          { value: 1, label: getMessage('SearchEngine.content') },
          { value: 2, label: getMessage('SearchEngine.folderName') },
          { value: 4, label: getMessage('SearchEngine.folder') },
          { value: 3, label: getMessage('SearchEngine.label') },
        ], // DMS搜索条件配置
        // selectFolderID: [], // DMS搜索文件夹id
        searchFolderName: getMessage('SearchEngine.enterpriseContentLibrary'), // DMS搜索文件夹名
        searchMode: true, // 打开搜索方式(模糊搜索和精确搜索)
        advancedSearchStyle: 'style1', // 高级搜索样式
      },
    ],
    fixedWidth: '420px',
    interactiveMethods: 'defaultWidth'
  },
};

export const SearchPropsContext = createContext<
  ContextStateType & {
    configEvents?: MutableRefObject<SearchEngineProps['callBackEvents']>;
    configEventsApi?: <T extends (...params: any) => Promise<any>>(props: {
      request: T;
      params: Parameters<T>[0];
      keys: string[];
    }) => ReturnType<any>;
  }
>(initialState);
